package model

import common.Config
import common.Direction
import common.doDirectionAction
import model.abstractClass.MoveableView
import model.inter.Blockable
import model.inter.DestoryAble
import model.inter.Moveable
import model.inter.Sufferable
import org.itheima.kotlin.game.core.Painter
import java.awt.Rectangle

/**
 * 这里我们的话，如果我们把View声明为接口的话，
 * 我们可以实现的一个操作就是将movealbe
 */
class MyTank(override var x:Int=0, override var y:Int=0)
    :MoveableView(x=x,y=y)
        ,Blockable
    ,Sufferable
    ,DestoryAble
{
    //override fun isNeedDestory(): Boolean = totalBlood <=0
    override fun isNeedDestory(): Boolean = false


    override var totalBlood: Int=100;

    //这里是移动必不可少的条件；
    override var mCurrentDirection: Direction=Direction.UP
    override var speed: Int=8
    override var mIsWillHit: Boolean=false;


    //Tank是有方向的；
    private val tankDirectionUpImgPath="img/tank_u.gif"
    private val tankDirectionDownImgPath="img/tank_d.gif"
    private val tankDirectionLeftImgPath="img/tank_l.gif"
    private val tankDirectionRightImgPath="img/tank_r.gif"


    override fun draw() {

        //这里我们需要把tank画出来；

        var tankImg = mCurrentDirection.doDirectionAction(
                {tankDirectionUpImgPath},
                {tankDirectionDownImgPath},
                {tankDirectionLeftImgPath},
                {tankDirectionRightImgPath})

        Painter.drawImage(tankImg,x,y)


        println("x,y->$x,$y")
    }


    /**
     * 这里我们要做的一个操作就是产生一颗子弹；
     */
    fun createBullet(): Bullet {

        /**
         * 这里我们通过回掉的方式计算得到x,y的值
         */
        return Bullet(mCurrentDirection,this) { bulletWidth, bulletHeight -> mCurrentDirection.doDirectionAction(
                {
                    val bulletX=  x+(width-bulletWidth)/2
                    val bulletY=  y-bulletHeight/2;
                    Pair<Int, Int>(bulletX,bulletY)
                },{
                    val bulletX=  x+(width-bulletWidth)/2
                    val bulletY=  y+height-bulletHeight/2;
            Pair<Int, Int>(bulletX,bulletY)
                },{

                    //左
                    val bulletX=  x-bulletWidth/2
                    val bulletY=  y+(height-bulletHeight)/2;
            Pair<Int, Int>(bulletX,bulletY)
                },{

                   //右
                    val bulletX=   x+(width+bulletWidth)/2
                    val bulletY=  y+(height-bulletHeight)/2;
                Pair<Int, Int>(bulletX,bulletY)

                })
        }
    }


    /**
     * 如果发生碰撞了
     * 我们就不再移动；
     */
    override fun move(direction: Direction) {

        //如果是不同方向，我们要做的一个操作就是改变方向，如果是相同判断，我们是需要判断一下是否发生了碰撞的操作
        if(direction!=mCurrentDirection){
            changeDirection(direction)
        }else{
            println("tank:move:$mIsWillHit")
            if(!mIsWillHit){
                super.move(direction)
            }
        }
    }
}